package com.xci.platform.auth.controller;

import com.xci.platform.annotation.Authorize;
import com.xci.platform.auth.service.RoleService;
import com.xci.platform.auth.service.UserService;
import com.xci.platform.core.BoolMessage;
import com.xci.platform.core.JsonGrid;
import com.xci.platform.helper.StringHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 系统用户角色映射控制器
 */
@Authorize
@Slf4j
@Controller
@RequestMapping("/auth/urmap")
public class UserRoleMapController extends AuthBaseController {

    /**
     * 系统用户服务
     */
    @Resource
    protected UserService userService;

    /**
     * 系统角色服务
     */
    @Resource
    protected RoleService roleService;

    //region 角色对应

    //region 页面视图

    /**
     * 角色对应用户页面
     */
    @GetMapping("/role")
    public String role(String roleId, ModelMap map) {
        map.put("roleId", roleId);
        return "auth/urmap/role";
    }

    /**
     * 角色对应用户添加用户选择页面
     */
    @GetMapping("/roleselect")
    public String roleSelect(String roleId, ModelMap map) {
        map.put("roleId", roleId);
        return "auth/urmap/role-select";
    }

    /**
     * 角色对应用户详细页面
     */
    @GetMapping("/roledetails")
    public String roleDetails(String roleId, ModelMap map) {
        map.put("roleId", roleId);
        return "auth/urmap/role-details";
    }

    //endregion

    //region 数据处理

    /**
     * 角色对应用户表格数据
     */
    @ResponseBody
    @GetMapping("/rolegrid")
    public JsonGrid roleGrid(String roleId, @RequestParam Map params) {
        return BoolMessage.grid(roleService.queryMapUserPageList(roleId, params));
    }

    /**
     * 角色对应用户表格未选择数据
     */
    @ResponseBody
    @GetMapping("/roleungrid")
    public JsonGrid roleUnGrid(String roleId, @RequestParam Map params) {
        return BoolMessage.grid(roleService.queryUnMapUserPageList(roleId, params));
    }

    /**
     * 角色对应用户添加用户
     */
    @ResponseBody
    @PostMapping("/rolesave")
    public BoolMessage roleSave(String roleId, String userIds) {
        return roleService.insertMapUser(roleId, StringHelper.splitToArray(userIds));
    }

    /**
     * 角色对应用户删除用户
     */
    @ResponseBody
    @PostMapping("/roledelete")
    public BoolMessage roleDelete(String roleId, String userIds) {
        return roleService.deleteMapUser(roleId, StringHelper.splitToArray(userIds));
    }

    //endregion

    //endregion

    //region 用户对应

    //region 页面视图

    /**
     * 用户对应角色页面
     */
    @GetMapping("/user")
    public String user(String userId, ModelMap map) {
        map.put("userId", userId);
        return "auth/urmap/user";
    }

    /**
     * 用户对应角色添加角色选择页面
     */
    @GetMapping("/userselect")
    public String userSelect(String userId, ModelMap map) {
        map.put("userId", userId);
        return "auth/urmap/user-select";
    }

    /**
     * 用户对应角色详细页面
     */
    @GetMapping("/usedetails")
    public String useDetails(String userId, ModelMap map) {
        map.put("userId", userId);
        return "auth/urmap/user-details";
    }

    //endregion

    //region 数据处理

    /**
     * 用户对应角色表格数据
     */
    @ResponseBody
    @GetMapping("/usergrid")
    public JsonGrid userGrid(String userId,@RequestParam Map params) {
        return BoolMessage.grid(userService.queryMapRolePageList(userId,params));
    }

    /**
     * 用户对应角色表格未选择数据
     */
    @ResponseBody
    @GetMapping("/userungrid")
    public JsonGrid userUnGrid(String userId,@RequestParam Map params) {
        return BoolMessage.grid(userService.queryUnMapRolePageList(userId,params));
    }

    /**
     * 用户对应角色添加角色
     */
    @ResponseBody
    @PostMapping("/usersave")
    public BoolMessage userSave(String userId, String roleIds) {
        return userService.insertMapRole(userId, StringHelper.splitToArray(roleIds));
    }

    /**
     * 用户对应角色删除角色
     */
    @ResponseBody
    @PostMapping("/userdelete")
    public BoolMessage userDelete(String userId, String roleIds) {
        return userService.deleteMapRole(userId, StringHelper.splitToArray(roleIds));
    }

    //endregion

    //endregion
}
